/**
 * 过滤菜单路由
 * @param {Array} routes 路由配置
 * @returns {Array} 过滤后的路由
 */
export const filterMenuRoutes = (routes) => {
  return routes.filter((route) => {
    // 隐藏的路由不显示
    if (route.meta?.hidden) return false

    // 处理子路由
    if (route.children?.length) {
      route.children = filterMenuRoutes(route.children)
      // 如果子路由都被过滤掉了，且没有自己的标题，则不显示该路由
      return route.children.length > 0 || route.meta?.title
    }

    return true
  })
}

/**
 * 生成面包屑数据
 * @param {Array} matched 匹配的路由记录
 * @returns {Array} 面包屑数据
 */
export const generateBreadcrumb = (matched) => {
  // 过滤掉不需要显示的路由
  const filteredMatched = matched.filter((item) => {
    return item.meta?.breadcrumb !== false && !item.meta?.hidden
  })

  // 如果是一级菜单（路由记录长度为2且第二个记录没有children），只显示首页和当前页
  if (filteredMatched.length === 2 && !filteredMatched[1].children?.length) {
    return filteredMatched.map((item, index) => {
      const isParent = item.children && item.children.length > 0
      const redirectPath = isParent ? `${item.path}/${item.children[0].path}` : item.path

      return {
        path: redirectPath,
        title: item.meta?.title || '',
        noRedirect: item.meta?.noRedirect || index === 1,
        isParent,
      }
    })
  }

  // 其他情况保持原有逻辑
  return filteredMatched.map((item, index) => {
    const isParent = item.children && item.children.length > 0
    const redirectPath = isParent ? `${item.path}/${item.children[0].path}` : item.path

    return {
      path: redirectPath,
      title: item.meta?.title || '',
      noRedirect: item.meta?.noRedirect || index === filteredMatched.length - 1,
      isParent,
    }
  })
}

/**
 * 获取完整路径
 * @param {string} basePath 基础路径
 * @param {string} path 当前路径
 * @returns {string} 完整路径
 */
export const getFullPath = (basePath, path) => {
  if (!basePath) return path
  return `${basePath}/${path}`.replace(/\/+/g, '/')
}

/**
 * 标准化重定向路径，去掉开头的斜杠
 * @param {string} path 路径
 * @returns {string} 标准化后的路径
 */
export const normalizeRedirectPath = (path) => {
  if (!path || path === '/') return ''
  return path.replace(/^\/+/, '')
}
